/*
 * 官网地站:http://www.mob.com
 * 技术支持QQ: 4006852216
 * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）
 *
 * Copyright (c) 2013年 mob.com. All rights reserved.
 */

package com.lechuang.share.themes.classic;

import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.lechuang.share.CustomerLogo;
import com.mob.tools.gui.ViewPagerAdapter;
import com.mob.tools.utils.ResHelper;

import java.util.ArrayList;

import cn.sharesdk.framework.Platform;

/**
 * 九宫格的适配器抽象类
 */
public abstract class PlatformPageAdapter extends ViewPagerAdapter implements OnClickListener {
    /**
     * 1秒内多次点击九格宫内的图标无效
     */
    protected static final int MIN_CLICK_INTERVAL = 1000;
    public static final int DESIGN_BOTTOM_HEIGHT = 52;

    /**
     * 九格宫内图标排列的二维数组，一维对应平台，二维对应页数
     */
    protected Object[][] cells;
    private PlatformPage page;
    private IndicatorView vInd;

    protected int bottomHeight;
    protected int panelHeight;
    protected int cellHeight;
    protected int lineSize;
    protected int sepLineWidth;
    protected int paddingTop;
    protected int logoHeight;

    private long lastClickTime;

    public PlatformPageAdapter(PlatformPage page, ArrayList<Object> cells) {
        this.page = page;
        if (cells != null && !cells.isEmpty()) {
            calculateSize(page.getContext(), cells);
            collectCells(cells);
        }
    }

    /**
     * 计算九宫格的格数，行数，格高，行高，图标大小
     */
    protected abstract void calculateSize(Context context, ArrayList<Object> plats);

    /**
     * 计算九宫格的格数，行数
     */
    protected abstract void collectCells(ArrayList<Object> plats);

    public int getBottomHeight() {
        return bottomHeight;
    }

    public int getPanelHeight() {
        return panelHeight+70;
    }

    public int getCount() {
        return cells == null ? 0 : cells.length;
    }

    public void setIndicator(IndicatorView view) {
        vInd = view;
    }

    public void onScreenChange(int currentScreen, int lastScreen) {
        if (vInd != null) {
            vInd.setScreenCount(getCount());
            vInd.onScreenChange(currentScreen, lastScreen);
        }
    }

    public View getView(int index, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = createPanel(parent.getContext());
        }

        LinearLayout llPanel = ResHelper.forceCast(convertView);
        LinearLayout[] llCells = ResHelper.forceCast(llPanel.getTag());
        refreshPanel(llCells, cells[index]);
        return convertView;
    }

    private View createPanel(Context context) {
        LinearLayout llPanel = new LinearLayout(context);
        llPanel.setOrientation(LinearLayout.VERTICAL);
        llPanel.setBackgroundColor(0xfff2f2f2);

        int lineCount = (panelHeight / cellHeight);
        LinearLayout[] llCells = new LinearLayout[lineCount * lineSize];
        llPanel.setTag(llCells);
        int cellBack = ResHelper.getBitmapRes(context, "ssdk_oks_classic_platform_cell_back");
        LinearLayout.LayoutParams lp;
        LinearLayout.LayoutParams top = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,50);
        top.bottomMargin=15;
        top.topMargin=5;
        TextView textView = new TextView(context);
        textView.setGravity(Gravity.CENTER);
        textView.setText("分享给好友");
        textView.setTextSize(16);
        textView.setTextColor(Color.parseColor("#5D5D5D"));
        textView.setBackgroundColor((Color.parseColor("#ffffff")));
        llPanel.addView(textView, top);
        for (int i = 0; i < lineCount; i++) {
            LinearLayout llLine = new LinearLayout(context);
            lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, cellHeight);
            llPanel.setBackgroundColor(Color.parseColor("#ffffff"));
            llPanel.addView(llLine, lp);

            for (int j = 0; j < lineSize; j++) {
                llCells[i * lineSize + j] = new LinearLayout(context);
                llCells[i * lineSize + j].setBackgroundResource(cellBack);
                llCells[i * lineSize + j].setOrientation(LinearLayout.VERTICAL);
                lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, cellHeight);
                lp.weight = 1;
                llLine.addView(llCells[i * lineSize + j], lp);

                if (j < lineSize - 1) {
                    View vSep = new View(context);
                    lp = new LinearLayout.LayoutParams(sepLineWidth, LayoutParams.MATCH_PARENT);
//					llLine.addView(vSep, lp);
                }
            }

            View vSep = new View(context);
            lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, sepLineWidth);
            llPanel.addView(vSep, lp);
        }

        for (LinearLayout llCell : llCells) {
            ImageView ivLogo = new ImageView(context);
            ivLogo.setScaleType(ScaleType.CENTER_INSIDE);
            lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, logoHeight);
            lp.topMargin = paddingTop;
            llCell.addView(ivLogo, lp);

            TextView tvName = new TextView(context);
            tvName.setText("微信");
            tvName.setTextSize(10);
            tvName.setTextColor(Color.parseColor("#5D5D5D"));
            tvName.setGravity(Gravity.CENTER);
            lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
            lp.weight = 1;
            llCell.addView(tvName, lp);
        }

        return llPanel;
    }

    private void refreshPanel(LinearLayout[] llCells, Object[] logos) {
        int cellBack = ResHelper.getBitmapRes(page.getContext(), "ssdk_oks_classic_platform_cell_back");
        int disableBack = ResHelper.getBitmapRes(page.getContext(), "ssdk_oks_classic_platfrom_cell_back_nor");
        for (int i = 0; i < logos.length; i++) {
            ImageView ivLogo = ResHelper.forceCast(llCells[i].getChildAt(0));
            TextView tvName = ResHelper.forceCast(llCells[i].getChildAt(1));
            if (logos[i] == null) {
                ivLogo.setVisibility(View.INVISIBLE);
                tvName.setVisibility(View.INVISIBLE);
                llCells[i].setBackgroundResource(disableBack);
                llCells[i].setOnClickListener(null);
            } else {
                ivLogo.setVisibility(View.VISIBLE);
                tvName.setVisibility(View.VISIBLE);
                ivLogo.requestLayout();
                tvName.requestLayout();
                llCells[i].setBackgroundResource(cellBack);
                llCells[i].setOnClickListener(this);
                llCells[i].setTag(logos[i]);

                if (logos[i] instanceof CustomerLogo) {
                    CustomerLogo logo = ResHelper.forceCast(logos[i]);
                    if (logo.logo != null) {
                        ivLogo.setImageBitmap(logo.logo);
                    } else {
                        ivLogo.setImageBitmap(null);
                    }
                    if (logo.label != null) {
                        tvName.setText(logo.label);
                    } else {
                        tvName.setText("");
                    }
                } else {
                    Platform plat = ResHelper.forceCast(logos[i]);
                    String name = plat.getName().toLowerCase();
                    int resId = ResHelper.getBitmapRes(ivLogo.getContext(), "ssdk_oks_classic_" + name);
                    if (resId > 0) {
                        ivLogo.setImageResource(resId);
                    } else {
                        ivLogo.setImageBitmap(null);
                    }
                    resId = ResHelper.getStringRes(tvName.getContext(), "ssdk_" + name);
                    if (resId > 0) {
                        tvName.setText(resId);
                    } else {
                        if (i == 0)
                            tvName.setText("微信好友");
                        else {
                            tvName.setText("微信朋友圈");
                        }
                    }
                }
            }
        }
    }

    public void onClick(View v) {
        long time = System.currentTimeMillis();
        if (time - lastClickTime < MIN_CLICK_INTERVAL) {
            return;
        }
        lastClickTime = time;

        if (v.getTag() instanceof CustomerLogo) {
            CustomerLogo logo = ResHelper.forceCast(v.getTag());
            page.performCustomLogoClick(v, logo);
        } else {
            Platform plat = ResHelper.forceCast(v.getTag());
            page.showEditPage(plat);
        }
    }

}
